/**
 * Project Name:JavaBaseReview
 * Package Name:com.xuwei.base.tree
 * author:David
 * Date:2016年5月9日上午9:50:14
 * Copyright (c) 2016, xw123box@126.com All Rights Reserved.
 *
 */
package com.xuwei.base.link;

import com.xuwei.base.link.Iterator;
import com.xuwei.base.link.Node;
import com.xuwei.ext.exception.InvalidNodeException;
import com.xuwei.ext.exception.OutOfBoundaryException;

/**
 * 链接表接口
 * @author David
 * @since 2016年5月9日 上午9:50:14
 * @version 
 * @since JDK 1.6
 */
public interface LinkedList {
	//查询链接表当前的规模
	public int getSize();
	//判断列表是否为空
	public boolean isEmpty();
	//返回第一个结点
	public Node first()throws OutOfBoundaryException;
	//返回最后一个结点
	public Node last()throws OutOfBoundaryException;
	//返回p之后的结点
	public Node getNext(Node p)throws InvalidNodeException,OutOfBoundaryException;
	//返回p之前的结点
	public Node getPre(Node p)throws InvalidNodeException,OutOfBoundaryException;
	//将e作为第一个元素插入链接表，并返回e所在结点
	public Node insertFist(Object e);
	//将e作为最后一个元素插入列表，并返回e所在结点
	public Node insertLast(Object e);
	//将e插入至p之后的位置，并返回e所在结点
	public Node insertAfter(Node p, Object e)throws InvalidNodeException;
	//将e插入至p之前的位置，并返回e所在结点
	public Node insertBefore(Node p, Object e)throws InvalidNodeException;
	//删除给定位置处的元素，并返回之
	public Object remove(Node p)throws InvalidNodeException;
	//删除首元素，并返回之
	public Object removeFirst()throws OutOfBoundaryException;
	//删除末元素，并返回之
	public Object removeLast()throws OutOfBoundaryException;
	//元素迭代器
	public Iterator elements();
	
	
	
}
